//
//  main.m
//  05-循环遍历
//
//  Created by 402030900@qq.com on 16/7/8.
//  Copyright © 2016年 402030900@qq.com. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
#if 1
//    定义 个数组, 包含5个字符串对象, 倒序取出数组中所 有元素, 并存储到另 可变数组中。
    NSArray * arr = @[@"一一",@"二二",@"三三",@"四四",@"五五"];
    NSMutableArray * muArr = [NSMutableArray array];
    for (NSInteger i = 4; i >= 0 ; i --) {
        [muArr addObject:arr[i]];
    }
//    NSLog(@"%@",muArr);
#endif
#if 0
//    自己写
//    使 for 循环完成:
//    定义 个字典,  于存储一个人的name,sex,age三个数据, 完成对其三个数据的输出。
    NSDictionary * dic= [NSDictionary dictionaryWithObjectsAndKeys:@"小王",@"name",@"nv",@"sex",@"23",@"age", nil];
    for (NSInteger i = 0; i < dic.allValues.count; i ++) {
//        NSLog(@"%@ = %@",dic.allKeys[i],dic.allValues[i]);
    }
#endif
#if 1
//    老师写
    //    使 for 循环完成:
    //    定义 个字典,  于存储一个人的name,sex,age三个数据, 完成对其三个数据的输出。
    NSDictionary * person = @{@"name":@"无所谓",
                              @"age":@18,
                              @"sex ":@"nv"};
   
    for (NSInteger i = 0; i < person.count; i ++) {
         NSString  * key = person.allKeys[i];
        id value = person.allValues[i];
//        NSLog(@"%@ = %@",key,value);
    }
#endif
    // 枚举器
    // 数组的枚举器
    //NSEnumerator依赖于集合类型(数组,字典,集合),不能单独使用
    NSEnumerator * stringArrayEnumerator = [arr objectEnumerator];
    id value = nil;
    while ((value = [stringArrayEnumerator nextObject]) != nil){
//        NSLog(@"value = %@",value);
    }
    // 倒序枚举
    NSEnumerator * reverse = [arr reverseObjectEnumerator];
    id value1 = nil;
    while (value1 = [reverse nextObject]) {
//        NSLog(@"value1 = %@",value1);
    }
    
    // 字典的枚举器(字典无序,没有倒序枚举)
    //默认取出来的值,是value
    NSEnumerator * dicEnumerator = [person.allKeys objectEnumerator];
    id dicValue = nil;
    while (dicValue = [dicEnumerator nextObject]) {
//       NSArray * keys = [person allKeysForObject:dicValue];
//        NSLog(@"keys = %@ value = %@",keys,dicValue);
    }
    
    // 集合枚举器(无序,也没有倒序枚举)
    NSSet * set = [NSSet setWithObjects:@"110",@"120",@"119",@"12315",@"114", nil];
    NSEnumerator * setEnumerator = [set objectEnumerator];
    id setValue = nil;
    while (setValue = [setEnumerator nextObject]) {
//        NSLog(@"setValue = %@",setValue);
    }
    
    // 快速枚举 for...in
    for (NSString * string in arr) {
//        NSLog(@"%@",string);
        
    }
//    使用 for ...in 完成:
//    定义1个数组, 包含5个字符串对象, 取出数组中所有字符串, 并拼接成一个新的字符串。
    NSString * newStr = [NSString string];
    for (NSString * apartStr in arr) {
       newStr = [newStr stringByAppendingString:apartStr];
       
    }
    //快速枚举一个字典
     NSLog(@"%@",newStr);
    for (NSString * key in person) {
//        NSLog(@"key = %@",key);
//        NSLog(@"value = %@",[person objectForKey:key]);
        
    }
    //快速枚举一个集合
    for (NSString * anyObject in set) {
//        NSLog(@"anyObject = %@",anyObject);
    }
    
    //排序
    // 参数1 key:排序条件
    // 参数2 acending: YES(升序)or NO(降序)
    NSArray * array = @[@1,@2,@3,@4];
    
    NSSortDescriptor * sortDesciptor = [[NSSortDescriptor alloc]initWithKey:@"self" ascending:NO];
    //数组有排序的方法(sortedArrayUsingDescriptors:)
    //参数为一个排序条件的数组
   array = [array sortedArrayUsingDescriptors:@[sortDesciptor]];
    NSLog(@"%@",array);
    // 可变数组进行排序
    NSMutableArray * muArray = [NSMutableArray arrayWithObjects:@11,@12,@10,@13, nil];
        [muArray sortedArrayUsingDescriptors:@[sortDesciptor]];
    NSLog(@"%@",muArray);
// 排序:可变数组和不可变数组通过sort排序调用的方法不同
    // 1.不可变数组,排序后需要生成新的数组
    // 2.可变数组,排序直接可以在本身修改
    Person * per1 = [[Person alloc]init];
    per1.name = @"起名难";
    per1.age = 100;
     Person * per2 = [[Person alloc]init];
    per2.name = @"起名难难";
     per2.age = 50;
    Person * per3 = [[Person alloc]init];
    per3.name = @"起名难难难";
     per3.age = 200;
    NSArray * perArray = @[per1,per2,per3];
    NSLog(@"排序前:%@",perArray);
    // 根据年龄排序
       NSSortDescriptor * perSort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
     NSArray * per = [perArray sortedArrayUsingDescriptors:@[perSort]];
    NSLog(@"排序后%@",per);
    
    // 排序2 sortedArrayUsingSelector:
    NSArray * sortString = @[@"iPhone",@"iPad",@"iTouch",@"iMac",@"Mac Mini"];
   sortString =  [sortString sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"%@",sortString);
    
    return 0;
}
